// 从 vuex 中导入 useStore 函数，用于获取 Vuex 存储实例
import store from "@/store";

/**
 * 检查是否可以进行登录后的下一步操作。
 * 如果用户已经登录，则直接返回成功；否则弹出模态框提示用户登录。
 *
 * @returns {Promise<boolean>} 如果用户已登录或选择去登录则 resolve 为 true，否则 reject 为 false。
 */
function canLoginNext() {
  return new Promise((resolve, reject) => {
    // 检查用户是否已经登录
    if (store.state.user.isLogin) {
      // 用户已登录，返回成功
      resolve(true);
    } else {
      // 用户未登录，弹出模态框提示用户登录
      uni.showModal({
        content: "请先进行登录",
        cancelText: "我再看看",
        confirmText: "去登录",
        success: (res) => {
          if (res.confirm) {
            // 用户点击去登录，跳转到登录页面
            uni.navigateTo({
              url: "/pages/user/login",
            });
          }
          // 用户未登录，返回失败
          reject(false);
        },
      });
    }
  });
}

/**
 * 检查是否可以进行门店相关的下一步操作。
 * 如果用户已经有可用门店，则直接返回成功；否则弹出模态框提示用户注册门店。
 *
 * @returns {Promise<boolean>} 如果用户已有门店或选择去注册门店则 resolve 为 true，否则 reject 为 false。
 */
function canStoreNext() {
  return new Promise((resolve, reject) => {
    // 检查用户是否已经有可用门店
    if (store.state.user.isStore) {
      // 用户已有可用门店，返回成功
      resolve(true);
    } else {
      // 用户没有可用门店，弹出模态框提示用户注册门店
      uni.showModal({
        content: "当前账号暂无可用门店，请先注册门店。",
        cancelText: "我再看看",
        confirmColor: "#ff2b2b",
        confirmText: "立即注册",
        success: (result) => {
          if (result.confirm) {
            // 用户点击立即注册，跳转到门店注册页面
            uni.navigateTo({
              url: "/pages/app/store",
            });
          }
          // 用户没有可用门店，返回失败
          reject(false);
        },
      });
    }
  });
}

/**
 * 检查是否可以进行门店相关的下一步操作，先检查登录状态，再检查门店状态。
 *
 * @returns {Promise<boolean>} 如果用户已登录且有可用门店则返回 true，否则返回 false。
 */
async function canNextForStore() {
  // 调用 canLoginNext 函数检查用户是否已经登录
  const loginNext = await canLoginNext();
  // 打印登录检查结果
  console.log(loginNext);
  // 如果用户未登录，返回 false
  if (!loginNext) return false;
  // 调用 canStoreNext 函数检查用户是否已经有可用门店
  const storeNext = await canStoreNext();
  // 如果用户没有可用门店，返回 false
  if (!storeNext) return false;
  // 用户已登录且有可用门店，返回 true
  return true;
}

/**
 * @description 将url参数转成对象
 * @param {string} url 要转换的url
 * @returns {object} 返回转换后的对象
 * @example
 * urlToObj("URL_ADDRESS * urlToObj("https://www.baidu.com?name=张三&age=18")
 * // { name: "张三", a
 * urlToObj("URL_ADDRESS.baidu.com?name=张三&age=18")
 *
 */
export function urlToObj(url) {
  let queryObj = {};
  const arr = url.split("&");
  // 遍历数组，将每个查询参数转换为键值对，并存储到queryObj对象中
  arr.forEach((item) => {
    const [key, value] = item.split("=");
    queryObj[key] = value;
  });
  // 返回查询参数对象
  return queryObj;
}

// 导出三个检查函数，供其他模块使用
export { canLoginNext, canStoreNext, canNextForStore };
